В: Создаю действия с помощью цикла, но они работают неправильно. Что делать?
О:
Это классическая "грабля", с которой сталкиваются все новички из-за неполного понимания порядка работы кода.
Допустим мы создаём действие:
Что мы при этом увидим на экране? Перед созданием действия переменной i присвоено значение 1. Значит название действия будет склеено из текста "Действие номер " и значения переменной i, то есть будет выглядеть так: "Действие номер 1".
Однако код, который мы назначили действию, будет выполнен только в момент нажатия действия.
То есть, если мы нажмём на действие, когда переменная i равна 1, мы увидим на экране текст: "Это действие номер 1". Но если переменную i изменить уже после создания действия, то когда мы нажмём на действие, мы увидим другой текст. Например:
В этом случае мы увидим на экране действие с названием "Действие номер 1", а текст, который оно выведет на экран при нажатии, будет такой: "Это действие номер 2".
Теперь давайте посмотрим, что происходит при создании действий с помощью цикла:
В конце цикла значение переменной i будет равно 6, тогда как цикл создаст нам пять действий с названиями:
Действие номер 1
Действие номер 2
Действие номер 3
Действие номер 4
Действие номер 5
При этом, какое бы действие мы не нажимали, поскольку значение переменной i будет равно 6, мы всегда при нажатии на действие будем видеть на экране строку текста: "Это действие номер 6".
Однако, мы можем формировать действия с конкретными значениями с помощью оператора dynamic:
Теперь на каждом проходе цикла, когда плеер будет встречать оператор dynamic, этому оператору будет передаваться строка текста:
Перед выполнением оператора dynamic плеер будет раскрывать подвыражения, подставляя вместо них значение i, соответствующее проходу. На первом проходе оператору dynamic будет передан такой текст:
На втором проходе такой:
И так далее.
dynamic выполняет код записанный в виде текста, и поскольку мы передаём ему команды для создания действий, будут созданы пять действий с конкретными числами в коде действий.
Для лучшего понимания попробуйте запустить такой код, и объясните его работу:
Aleks Versus'HowDo-F.A.Q.'2021-2022
Aleks Versus'Game Adventure Making'Really Unimaginable Stories'2013-2022
1.1. В чём разница между set x=10, let x=10 и x=10?
1.2. В чём разница между переменной со знаком $ и без знака $?
1.3. В чём разница между ' ' (апострофы) и " " (кавычки)?
1.4. В чём разница между *pl "строка" и просто " строка" ?
1.5. Чем отличаются эти две команды? *pl "<<$perem>>" и *pl $perem
1.6. В чём разница между dynamic и dyneval?
1.7. В чём разница между gt и goto?
1.8. Чем отличается goto от gosub?
18.1. Чем отличаются команды addqst и openqst?
Источники и дополнительные материалы
2.1. Как сделать, чтобы значение переменной изменялось с течением времени?
2.2. Как сделать, чтобы из одной локации меня через пару секунд перебрасывало в другую локацию?
2.3. Как сделать, чтобы через пару секунд после входа на локацию появлялось новое действие?
2.4. Как сделать, чтобы цикл выполнялся параллельно остальному коду, а не прерывал его?
Источники и дополнительные материалы
3.1. Как вывести на экран отдельное окошко с текстом? | Подскажите аналог команды alert в QSP.
3.2. Как вывести на экран окошко, в котором игрок должен ввести текст? | Подскажите аналог команды prompt в QSP.
3.3. Как прикрутить возможность выбора варианта к окну msg? | Подскажите аналог команды confirm в QSP.
3.4. Как сделать ввод имени игроком?
3.5. Как увеличить число правильных ответов, которые может ввести игрок? | Как сделать варианты для ответа через $input?
Источники и дополнительные материалы
4.1. Как сделать меню предмета?
4.2. Как сделать разные меню для двух и более предметов?
4.3. Как сделать меню в ссылках?
4.4. Как передавать локациям-пунктам меню аргументы?
4.5. Как делать контекстное (динамическое) меню?
4.6. Как вставить разделитель в меню?
4.7. Как вставить картинки в меню?
Источники и дополнительные материалы
5.1. Как сделать так, чтобы не писать один и тот же код в каждой локации?
5.2. Как сделать кнопку "Назад", работающую на каждой локации?
5.3. Почему в args на локации-обработчике перехода на новую локацию уже есть данные?
Источники и дополнительные материалы
6.1. Как вставить музыку или звук в игру?
6.2. Как запустить две звуковые дорожки?
6.3. Как при переходе на новую локацию прервать одну мелодию и запустить другую?
6.4. Как перезапустить звуковую дорожку?
Источники и дополнительные материалы
7.1. Как делать гиперссылки, по нажатию на которые выполняется код? | Как делать кликабельный текст? | Как сделать, чтобы по нажатию на текст что-то происходило?
7.2. Как менять цвет гиперссылки?
7.3. Как помещать в гиперссылки сложный код?
7.4. Как сделать гиперссылки без подчёркивания?
Источники и дополнительные материалы
8.1. Какой командой можно очистить окно дополнительного описания?
8.2. Существует ли команда для того, чтобы получить название текущей локации?
8.3. Какой командой можно вывести текст в окно дополнительного описания?
8.4. Есть ли команда, которая делает выход из игры?
Источники и дополнительные материалы
9.1. Как вставить картинку в игру?
9.2. Можно ли вставить в игру gif-файл?
9.3. Как вставить картинку в действие?
9.4. Как поставить картинку фоном?
9.5. Как выводить изображения послойно? Накладывать друг на друга?
9.6. Как сделать кликабельное изображение? | Как сделать так, чтобы при щелчке по изображению выполнялись какие-то действия?
9.7. Как сделать сменяемое изображение на локации?
9.8. Как сделать вывод рандомного изображения?
Источники и дополнительные материалы
10.1. Для чего нужен оператор REFINT, и как он работает?
10.2. Как изменить цвет фона в игре?
10.3. Как изменить формат части текста? Размер, цвет, наклон и т.д.?
10.4. Как сделать красивый фон в классическом плеере?
10.5. Хочу, чтоб в игре окна располагались определённым образом. Как это сделать?
10.8. Как изменить цвет подсветки действий?
10.9. Как изменить цвет фона для отдельного окна?
10.10. Как сделать плавное появление текста? | Как сделать плавное изменение цвета фона? | Как сделать плавное изменение цвета текста?
10.11. Как использовать в игре собственный шрифт?
10.12. С предметов можно снимать выделение, а можно ли снять выделение с действия?
Источники и дополнительные материалы
11.1. При проверке условия записано просто число, без операции сравнения, но QSP не выдаёт ошибку. Почему?
11.2. Как сделать так, чтобы действие появлялось только при определённом условии?
11.3. Видел в одной из игр, как после нажатия на действие, оно становится неактивным. Как это сделать?
11.4. Как добавить текст, который будет выводиться только при выполнении определённого условия?
11.6. Как упростить условие с логическим И (AND)?
11.7. Как упростить взаимоисключающие условия? Логическое XOR.
Источники и дополнительные материалы
12.1. Зачем нужен оператор dynamic?
12.2. Можно ли сделать переменную с рандомным (случайным) названием?
12.3. Создаю действия с помощью цикла, но они работают неправильно. Что делать?
12.4. Почему не работает dynamic?
Источники и дополнительные материалы
13.1. Рисую таблицу и хочу зафиксировать высоту, но атрибут height не работает.
13.2. Пытаюсь использовать разные HTML-теги в игре, но они не работают — просто не выводятся. Почему?
13.3. Не работает IIF!
13.4. Пытаюсь сделать кликабельную картинку с помощью тегов MAP и AREA, но ничего не получается. | Не выводится картинка, не работает область клика, область клика смещена.
13.5. Не работает *pl в действии с goto.
13.6. В AeroQSP не работает атрибут.
13.7. Не работает гиперссылка в AeroQSP.
13.8. Не работает оператор JUMP — не может найти метку.
13.9. Не работает многострочный код. Как исправить?
13.10. Не работает многострочный код. Как исправить?
13.11. Сколько END`ов нужно добавить?
13.12. Не работает условие. Как исправить? (if skrom>10 and <15)
13.13. Не работают десятичные дроби, дробные числа, числа с запятыми!
Источники и дополнительные материалы
14.1. Как добавить предмет в окно предметов?
14.2. Как удалить предмет из окна предметов?
14.3. Как удалить все предметы?
14.4. Как добавить предмет в определённую позицию в окне предметов?
14.5. Как заменить один предмет на другой?
14.6. Как делать динамические/считаемые предметы? | Как делать стакающиеся предметы? | Как делать предметы рядом с названиями которых выводится их количество?
14.7. Как добавить предмет с картинкой но без названия?
14.8. Как сделать, чтоб при щелчке по предмету выполнялся какой-либо код?
14.9. Как снять выделение предмета? | Как сделать, чтобы выбранный предмет можно было кликнуть ещё раз?
14.10. Как сделать два списка предметов? Например для игры за разных персонажей.
14.11. Как сделать, чтобы плеер выполнял определённый код при добавлении любого предмета?
14.12. Как сделать два разных предмета с одинаковыми названиями?
14.13. Как сделать многоуровневый рюкзак? | Как сделать предметы в предметах?
14.14. Можно ли выводить предметы не в окне предметов?
Источники и дополнительные материалы
15.1. Зачем вообще нужна строка ввода (поле ввода)?
15.2. Как задействовать строку ввода в игре?
Источники и дополнительные материалы
16.1. Можно ли писать текст поверх вставленной картинки (не бэкграунда)?
16.2. Возможно ли сделать плавный переход между локациями?
16.3. Как расположить картинку справа, а текст слева?
16.4. Как ограничить размер выводимого изображения?
16.5. Как сделать рамку окна основного описания? | Как сделать, чтобы картинки шли по контуру основного окна?
16.6. Как сделать вывод предметов магазина не длинным списком, а в виде таблицы?
16.7. Можно ли зеркально отразить картинку методами плеера? | Можно ли задать максимальную или минимальную ширину элементу? | Можно ли вычислить доступное место в основном окне?
16.9. Можно как нибудь вывести текст в два столба в классике? К примеру характеристики персонажей.
16.10. Как работать с тегами MAP и AREA? Как разметить картинку на кликабельные зоны?
Источники и дополнительные материалы
17.1. Как запретить игроку самостоятельно сохранять игру?
17.3. Как сделать чекпойнты в игре?
Источники и дополнительные материалы
18.1. Чем отличаются команды addqst и openqst?
18.2. Как сделать лаунчер?
18.3. Мне нужно узнать, есть ли в папке файл (картинка, музыка и т.д.). Как это сделать?
Источники и дополнительные материалы
19.1. Как использовать ASCII-графику в QSP?
19.2. Как вставить в игру видео?
19.3. Как сделать так, чтобы текст появлялся на экране постепенно? По буквам?
19.4. Как защитить игру от чита?
19.5. Как задействовать клавиатуру в игре?
19.6. Как пропустить прохождение нескольких глав, чтобы протестировать вновь написанную главу и только её?
19.7. Как из под плеера выполнить произвольную строку кода?
19.8. Как узнать, на каком устройстве запущена игра? Телефон, компьютер, планшет?
19.9. Как обновлять переменные на экране?
19.10. Как сделать, чтобы текст выводился снизу вверх?
Источники и дополнительные материалы
20.1. Как сделать возврат на предыдущую локацию?
20.2. Как проверить число на чётность?
20.4. Как сделать, чтобы текст выводился не внизу окна основного описания, а сверху?
20.5. Как можно удалить часть текста из описания?
20.6. Как вывести на экран HTML-разметку, не отключая режим распознавания HTML? То есть при usehtml=1.
20.8. Как в QSP сравнить два массива?
20.11. Как сделать проценты?
20.12. Как решить задачу по поиску случайного набора слагаемых?
20.13. Как разредить текст пробелами?
20.14. Как сделать записную книжку в игре?
20.15. Как сделать так, чтобы на локацию можно было зайти только один раз?
20.16. Как заставить действия выводиться в нужном мне порядке?
20.17. Как сделать в игре книгу? Чтобы её можно было взять и потом прочитать?
20.18. Как сделать склад, сундук, тайник, место, в котором можно выкладывать и хранить предметы?
20.19. Как сделать выпадение случайного действия на локации?
20.20. Как сделать перемещение на случайную локацию?
20.21. Как сделать случайный предмет?
20.22. Как узнать, какие переменные есть в игре? Может для этого есть специальная команда?
20.23. Как убрать преформатирование из HTML-разметки?
Источники и дополнительные материалы
Источники и дополнительные материалы
22.1. Пишу несколько игр в Quest Navigator. Как сделать, чтобы у каждой игры было собственное оформление?
22.2. Как подключить свой шрифт к игре?
22.4. Хочу прописать игре собственный вид курсора, как это сделать?
22.6. Как узнать, на каком плеере запущена игра, на классическом QSP, или на Quest Navigator?
22.7. Как вставить видео в игру на Навигаторе?
22.8. Как делать standalone-сборку на Навигаторе? | Независимая сборка на Quest Navigator
22.10. Как выполнить JavaScript прямо из кода QSP?
22.11. Инструкция посмене оформления из кода QSP?
Источники и дополнительные материалы
23.2. Хочу разместить на локации около 100 действий. Это вообще возможно?
Источники и дополнительные материалы
24.1. Как сделать так, чтобы AeroQSP запускался прямо из Quest Generator?
24.2. Как сделать StandAlone-сборку на классическом плеере? | Можно ли сделать игру так, чтобы играть без плеера? | Как сделать пакетный файл запуска, чтобы игрок тыкал иконку start и сразу начинал играть?
Источники и дополнительные материалы
Алфавитный указатель ключевых слов, спецсимволов, синтаксем